package com.twopai.framelibrary.mvp;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * Author:twopai
 * Date:2018/6/26
 * Description:
 */
public abstract class BaseFragment extends Fragment {
    private Unbinder unBinder;
    private View mRootView;
    private boolean isInit;
    private boolean isLoad;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        if (mRootView == null) {
            mRootView = inflater.inflate(getLayoutId(), container, false);
            Log.e("   onCreateView","------>root  null");
        } else {
            Log.e("   onCreateView","------>root not null");
            //  二次加载删除上一个子view
            ViewGroup viewGroup = (ViewGroup) mRootView.getParent();
            if (viewGroup != null) {
                viewGroup.removeView(mRootView);
            }
        }

        unBinder = ButterKnife.bind(this, mRootView);
        //处理预加载问题，让fragment懒加载
        isInit = true;
        //初始化的时候去加载数据
        initView(savedInstanceState);
        iniTitle();
        isCanLoadData();
        return mRootView;
    }
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        isCanLoadData();
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        try {
            unBinder.unbind();
        }catch (Exception e){
        }
        isInit = false;
        isLoad = false;
    }
    /**
     * 是否可以加载数据
     * 可以加载数据的条件：
     * 1.视图已经初始化
     * 2.视图对用户可见
     */
    private void isCanLoadData() {
        //视图没有初始化
        if (!isInit) {
            return;
        }

        //判断视图对用户是否可见
        if (getUserVisibleHint()) {
            lazyLoad();
            isLoad = true;
        } else {
            if (isLoad) {
                stopLoad();
            }
        }

    }
    /**
     * 当视图初始化并对用户可见的时候去真正的加载数据
     * //里面开始对页面进行数据加载
     */
    protected abstract void lazyLoad();
    /**
     * 当视图已经对用户不可见并且加载过数据，如果需要在切换到其他页面时停止加载数据，可以覆写此方法
     * //让已经在加载过数据并不可见的页面停止加载（例如 视频播放时切换过去不可见时，要让它停止播放）
     */
    protected abstract void stopLoad();
    /**
     * 初始化视图
     *
     */
    protected abstract void iniTitle();

    protected abstract void initView(@Nullable Bundle savedInstanceState);


    protected abstract int getLayoutId();
}
